<!DOCTYPE html>
<html lang="zh" dir="auto">

<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Init | lilibing</title>

<meta name="keywords" content="tags" />
<meta name="description" content="Desc Text.">
<meta name="author" content="">
<link rel="canonical" href="https://lilibing.gitee.io/posts/init/" />
<link href="/assets/css/stylesheet.min.cd40c368c08282c64bf38ce275a2cd18fc557d21fb4fbdde5973bd5d24d21090.css" integrity="sha256-zUDDaMCCgsZL84zidaLNGPxVfSH7T73eWXO9XSTSEJA=" rel="preload stylesheet"
    as="style">

<link rel="icon" href="https://lilibing.gitee.io/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://lilibing.gitee.io/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://lilibing.gitee.io/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://lilibing.gitee.io/apple-touch-icon.png">
<link rel="mask-icon" href="https://lilibing.gitee.io/%3Clink%20/%20abs%20url%3E">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<meta name="generator" content="Hugo 0.81.0" />


<meta property="og:title" content="Init" />
<meta property="og:description" content="Desc Text." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://lilibing.gitee.io/posts/init/" />
<meta property="article:published_time" content="2021-03-11T08:20:57+08:00" />
<meta property="article:modified_time" content="2021-03-11T08:20:57+08:00" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Init"/>
<meta name="twitter:description" content="Desc Text."/>


<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position":  1 ,
      "name": "Posts",
      "item": "https://lilibing.gitee.io/posts/"
    }, 
    {
      "@type": "ListItem",
      "position":  2 ,
      "name": "Init",
      "item": "https://lilibing.gitee.io/posts/init/"
    }
  ]
}
</script>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Init",
  "name": "Init",
  "description": "Maevn简介  Maven 是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型（缩写：POM）概念，Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 Maven 是一个项目管理工具，可以对 Java 项目进行构建、依赖管理。\n 1.Maven约定配置 Maven默认配置\n 一个 maven …",
  "keywords": [
    "tags"
  ],
  "articleBody": "Maevn简介  Maven 是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型（缩写：POM）概念，Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 Maven 是一个项目管理工具，可以对 Java 项目进行构建、依赖管理。\n 1.Maven约定配置 Maven默认配置\n 一个 maven 项目在默认情况下会产生 JAR 文件，另外 ，编译后 的 classes 会放在 ${basedir}/target/classes 下面， JAR 文件会放在 ${basedir}/target 下面。 archetype:generate 目标会列出一系列的 archetype 让你选择。 Archetype 可以理解成项目的模型。Maven 为我们提供了很多种的项目模型，包括从简单的 Swing 到复杂的 Web 应用 当你第一次运行 maven 的时候，它会从网上的 maven 库 (repository) 下载需要的程序，存放在你电脑的本地库 (local repository) 中，所以这个时候你需要有 Internet 连接。Maven 默认的本地库是 ~/.m2/repository/，在 Windows 下是 %USER_HOME%.m2\\repository\\ 。  2.POM 一个项目所有的配置都放置在 POM 文件中：定义项目的类型、名字，管理依赖关系，定制插件的行为等等。比如说，你可以配置 compiler 插件让它使用 java 1.5 来编译。\n 在 POM 中，groupId, artifactId, packaging, version 叫作 maven 坐标，它能唯一的确定一个项目。有了 maven 坐标，我们就可以用它来指定我们的项目所依赖的其他项目，插件，或者父项目。  POM配置\n3.Maven插件 我们使用 mvn archetype:generate 命令来生成一个项目。archetype 是一个插件的名字，generate是目标(goal)的名字。这个命令的意思是告诉 maven 执行 archetype 插件的 generate 目标。插件目标通常会写成 pluginId:goalId\n一个目标是一个工作单元，而插件则是一个或者多个目标的集合。比如说Jar插件，Compiler插件，Surefire插件等。从看名字就能知道，Jar 插件包含建立Jar文件的目标， Compiler 插件包含编译源代码和单元测试代码的目标。Surefire 插件的话，则是运行单元测试\n看到这里，估计你能明白了，mvn 本身不会做太多的事情，它不知道怎么样编译或者怎么样打包。它把构建的任务交给插件去做。插件定义了常用的构建逻辑，能够被重复利用。这样做的好处是，一旦插件有了更新，那么所有的 maven 用户都能得到更新。\n4.Maven生命周期 mvn package。这里的 package 是一个maven的生命周期阶段 (lifecycle phase )。生命周期指项目的构建过程，它包含了一系列的有序的阶段 (phase)，而一个阶段就是构建过程中的一个步骤。\n那么生命周期阶段和上面说的插件目标之间是什么关系呢？插件目标可以绑定到生命周期阶段上。一个生命周期阶段可以绑定多个插件目标。当 maven 在构建过程中逐步的通过每个阶段时，会执行该阶段所有的插件目标。\nmaven 能支持不同的生命周期，但是最常用的是默认的Maven生命周期 (default Maven lifecycle )。如果你没有对它进行任何的插件配置或者定制的话，那么上面的命令 mvn package 会依次执行默认生命周期中直到包括 package 阶段前的所有阶段的插件目标：\n5.Maven依赖管理 maven 坐标能够确定一个项目。换句话说，我们可以用它来解决依赖关系。在 POM 中，依赖关系是在 dependencies 部分中定义的。\n例如，我们用 dependencies 定义了对于 junit 的依赖：\n  junit junit 3.8.1 test   这个例子很简单，但是实际开发中我们会有复杂得多的依赖关系，因为被依赖的 jar 文件会有自己的依赖关系。那么我们是不是需要把那些间接依赖的 jar 文件也都定义在POM中呢？答案是不需要，因为 maven 提供了传递依赖的特性。\n6.Maven库 当第一次运行 maven 命令的时候，你需要 Internet 连接，因为它要从网上下载一些文件。那么它从哪里下载呢？它是从 maven 默认的远程库(http://repo1.maven.org/maven2) 下载的。这个远程库有 maven 的核心插件和可供下载的 jar 文件。\n除了从远程仓库中下载，我们同样可以构建自己的Maven仓库。Maven在下载远程库中的文件之前都会先查询本地库。本地库是指 maven 下载了插件或者 jar 文件后存放在本地机器上的拷贝。在 Linux 上，它的位置在 ~/.m2/repository，在 Windows XP 上，在 C:\\Documents and Settings\\username.m2\\repository ，在 Windows 7 上，在 C:\\Users\\username.m2\\repository。当 maven 查找需要的 jar 文件时，它会先在本地库中寻找，只有在找不到的情况下，才会去远程库中找。\n运行mvn install来讲项目安装到本地库。一旦一个项目被安装到了本地库后，你别的项目就可以通过 maven 坐标和这个项目建立依赖关系。\n我就可以如下所示来建立依赖关系：\n com.mycompany.helloworld helloworld 1.0-SNAPSHOT  ",
  "wordCount" : "196",
  "inLanguage": "zh",
  "datePublished": "2021-03-11T08:20:57+08:00",
  "dateModified": "2021-03-11T08:20:57+08:00",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://lilibing.gitee.io/posts/init/"
  },
  "publisher": {
    "@type": "Organization",
    "name": "lilibing",
    "logo": {
      "@type": "ImageObject",
      "url": "https://lilibing.gitee.io/favicon.ico"
    }
  }
}
</script>





</head>

<body class="" id="top">
<script>
    if (localStorage.getItem("pref-theme") === "dark") {
        document.body.classList.add('dark');
    } else if (localStorage.getItem("pref-theme") === "light") {
        document.body.classList.remove('dark')
    } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
        document.body.classList.add('dark');
    }

</script>
<noscript>
    <style type="text/css">
        #theme-toggle,
        .top-link {
            display: none;
        }

    </style>
</noscript>
<header class="header">
    <nav class="nav">
        <div class="logo">
            <a href="https://lilibing.gitee.io/" accesskey="h" title="lilibing (Alt + H)">
                <img src="/favicon.ico" alt="logo" aria-label="logo"
                    height="20">lilibing</a>
            <span class="logo-switches">
                <button id="theme-toggle" accesskey="t" title="(Alt + T)">
                    <svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
                    </svg>
                    <svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <circle cx="12" cy="12" r="5"></circle>
                        <line x1="12" y1="1" x2="12" y2="3"></line>
                        <line x1="12" y1="21" x2="12" y2="23"></line>
                        <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
                        <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
                        <line x1="1" y1="12" x2="3" y2="12"></line>
                        <line x1="21" y1="12" x2="23" y2="12"></line>
                        <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
                        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
                    </svg>
                </button>
                
                
            </span>
        </div>
        <ul id="menu" onscroll="menu_on_scroll()">
            <li>
                <a href="https://lilibing.gitee.io/search/" title="搜索">
                    <span>搜索</span>
                </a>
            </li>
            <li>
                <a href="https://lilibing.gitee.io/archives/" title="归档">
                    <span>归档</span>
                </a>
            </li>
            <li>
                <a href="https://lilibing.gitee.io/categories/" title="分类">
                    <span>分类</span>
                </a>
            </li>
            <li>
                <a href="https://lilibing.gitee.io/tags/" title="便签">
                    <span>便签</span>
                </a>
            </li>
            <li>
                <a href="https://www.baidu.com" title="关于">
                    <span>关于</span>
                </a>
            </li></ul>
    </nav>
</header>

    <main class="main">

<article class="post-single">
  <header class="post-header">
<div class="breadcrumbs">

    <a href="https://lilibing.gitee.io/">Home</a>&nbsp;»&nbsp;<a href="https://lilibing.gitee.io/posts/">Posts</a>
</div>

    <h1 class="post-title">
      Init
    </h1>
    <div class="post-description">
      Desc Text.
    </div>
    <div class="post-meta">March 11, 2021

</div>
  </header> 

  <div class="toc">
    <details >
      <summary accesskey="c" title="(Alt + C)">
        <div class="details">目录</div>
      </summary>
      <div class="inner"><ul><li>
        <a href="#maevn%e7%ae%80%e4%bb%8b" aria-label="Maevn简介">Maevn简介</a><ul>
            <li>
        <a href="#1maven%e7%ba%a6%e5%ae%9a%e9%85%8d%e7%bd%ae" aria-label="1.Maven约定配置">1.Maven约定配置</a></li><li>
        <a href="#2pom" aria-label="2.POM">2.POM</a></li><li>
        <a href="#3maven%e6%8f%92%e4%bb%b6" aria-label="3.Maven插件">3.Maven插件</a></li><li>
        <a href="#4maven%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f" aria-label="4.Maven生命周期">4.Maven生命周期</a></li><li>
        <a href="#5maven%e4%be%9d%e8%b5%96%e7%ae%a1%e7%90%86" aria-label="5.Maven依赖管理">5.Maven依赖管理</a></li><li>
        <a href="#6maven%e5%ba%93" aria-label="6.Maven库">6.Maven库</a></li></ul>
</li></ul>
      </div>
    </details>
  </div>
  <div class="post-content">
<h1 id="maevn简介">Maevn简介<a hidden class="anchor" aria-hidden="true" href="#maevn简介">#</a></h1>
<blockquote>
<p>Maven 是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型（缩写：POM）概念，Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具，可以对 Java 项目进行构建、依赖管理。</p>
</blockquote>
<h2 id="1maven约定配置">1.Maven约定配置<a hidden class="anchor" aria-hidden="true" href="#1maven约定配置">#</a></h2>
<p><a href="https://www.notion.so/a3dc877c8ef34bc6bbc5745249c6259a">Maven默认配置</a></p>
<ul>
<li>一个 maven 项目在默认情况下会产生 JAR 文件，另外 ，编译后 的 classes 会放在 ${basedir}/target/classes 下面， JAR 文件会放在 ${basedir}/target 下面。</li>
<li>archetype:generate 目标会列出一系列的 archetype 让你选择。 Archetype 可以理解成项目的模型。Maven 为我们提供了很多种的项目模型，包括从简单的 Swing 到复杂的 Web 应用</li>
<li>当你第一次运行 maven 的时候，它会从网上的 maven 库 (repository) 下载需要的程序，存放在你电脑的本地库 (local repository) 中，所以这个时候你需要有 Internet 连接。Maven 默认的本地库是 ~/.m2/repository/，在 Windows 下是 %USER_HOME%.m2\repository\ 。</li>
</ul>
<h2 id="2pom">2.POM<a hidden class="anchor" aria-hidden="true" href="#2pom">#</a></h2>
<p>一个项目所有的配置都放置在 POM 文件中：定义项目的类型、名字，管理依赖关系，定制插件的行为等等。比如说，你可以配置 compiler 插件让它使用 java 1.5 来编译。</p>
<ul>
<li>在 POM 中，groupId, artifactId, packaging, version 叫作 maven 坐标，它能唯一的确定一个项目。有了 maven 坐标，我们就可以用它来指定我们的项目所依赖的其他项目，插件，或者父项目。</li>
</ul>
<p><a href="https://www.notion.so/d6e9a77c23b348229449f76827bc9521">POM配置</a></p>
<h2 id="3maven插件">3.Maven插件<a hidden class="anchor" aria-hidden="true" href="#3maven插件">#</a></h2>
<p>我们使用 <code>mvn archetype:generate</code> 命令来生成一个项目。<code>archetype</code> 是一个插件的名字，<code>generate</code>是目标(goal)的名字。这个命令的意思是告诉 <code>maven</code> 执行 <code>archetype</code> 插件的 <code>generate</code> 目标。插件目标通常会写成 <code>pluginId:goalId</code></p>
<p>一个目标是一个工作单元，而插件则是一个或者多个目标的集合。比如说<code>Jar</code>插件，<code>Compiler</code>插件，<code>Surefire</code>插件等。从看名字就能知道，<code>Jar</code> 插件包含建立Jar文件的目标， <code>Compiler</code> 插件包含编译源代码和单元测试代码的目标。<code>Surefire</code> 插件的话，则是运行单元测试</p>
<p>看到这里，估计你能明白了，<code>mvn</code> 本身不会做太多的事情，它不知道怎么样编译或者怎么样打包。它把构建的任务交给插件去做。插件定义了常用的构建逻辑，能够被重复利用。这样做的好处是，一旦插件有了更新，那么所有的 <code>maven</code> 用户都能得到更新。</p>
<h2 id="4maven生命周期">4.Maven生命周期<a hidden class="anchor" aria-hidden="true" href="#4maven生命周期">#</a></h2>
<p>mvn package。这里的 package 是一个maven的生命周期阶段 (lifecycle phase )。生命周期指项目的构建过程，它包含了一系列的有序的阶段 (phase)，而一个阶段就是构建过程中的一个步骤。</p>
<p>那么生命周期阶段和上面说的插件目标之间是什么关系呢？插件目标可以绑定到生命周期阶段上。一个生命周期阶段可以绑定多个插件目标。当 <code>maven</code> 在构建过程中逐步的通过每个阶段时，会执行该阶段所有的插件目标。</p>
<p>maven 能支持不同的生命周期，但是最常用的是默认的Maven生命周期 <code>(default Maven lifecycle )</code>。如果你没有对它进行任何的插件配置或者定制的话，那么上面的命令 <code>mvn package</code> 会依次执行默认生命周期中直到包括 package 阶段前的所有阶段的插件目标：</p>
<h2 id="5maven依赖管理">5.Maven依赖管理<a hidden class="anchor" aria-hidden="true" href="#5maven依赖管理">#</a></h2>
<p>maven 坐标能够确定一个项目。换句话说，我们可以用它来解决依赖关系。在 POM 中，依赖关系是在 dependencies 部分中定义的。</p>
<p>例如，我们用 dependencies 定义了对于 junit 的依赖：</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;dependencies&gt;</span> 
    <span style="color:#f92672">&lt;dependency&gt;</span> 
      <span style="color:#f92672">&lt;groupid&gt;</span>junit<span style="color:#f92672">&lt;/groupid&gt;</span> 
      <span style="color:#f92672">&lt;artifactid&gt;</span>junit<span style="color:#f92672">&lt;/artifactid&gt;</span> 
      <span style="color:#f92672">&lt;version&gt;</span>3.8.1<span style="color:#f92672">&lt;/version&gt;</span> 
      <span style="color:#f92672">&lt;scope&gt;</span>test<span style="color:#f92672">&lt;/scope&gt;</span> 
    <span style="color:#f92672">&lt;/dependency&gt;</span> 
  <span style="color:#f92672">&lt;/dependencies&gt;</span>
</code></pre></div><p>这个例子很简单，但是实际开发中我们会有复杂得多的依赖关系，因为被依赖的 jar 文件会有自己的依赖关系。那么我们是不是需要把那些间接依赖的 jar 文件也都定义在POM中呢？答案是不需要，因为 maven 提供了传递依赖的特性。</p>
<h2 id="6maven库">6.Maven库<a hidden class="anchor" aria-hidden="true" href="#6maven库">#</a></h2>
<p>当第一次运行 maven 命令的时候，你需要 Internet 连接，因为它要从网上下载一些文件。那么它从哪里下载呢？它是从 maven 默认的远程库(<a href="http://repo1.maven.org/maven2">http://repo1.maven.org/maven2</a>) 下载的。这个远程库有 maven 的核心插件和可供下载的 jar 文件。</p>
<p>除了从远程仓库中下载，我们同样可以构建自己的Maven仓库。Maven在下载远程库中的文件之前都会先查询本地库。本地库是指 maven 下载了插件或者 jar 文件后存放在本地机器上的拷贝。在 Linux 上，它的位置在 ~/.m2/repository，在 Windows XP 上，在 C:\Documents and Settings\username.m2\repository ，在 Windows 7 上，在 C:\Users\username.m2\repository。当 maven 查找需要的 jar 文件时，它会先在本地库中寻找，只有在找不到的情况下，才会去远程库中找。</p>
<p>运行<code>mvn install</code>来讲项目安装到本地库。一旦一个项目被安装到了本地库后，你别的项目就可以通过 maven 坐标和这个项目建立依赖关系。</p>
<p>我就可以如下所示来建立依赖关系：</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;dependency&gt;</span>
      <span style="color:#f92672">&lt;groupid&gt;</span>com.mycompany.helloworld<span style="color:#f92672">&lt;/groupid&gt;</span>
      <span style="color:#f92672">&lt;artifactid&gt;</span>helloworld<span style="color:#f92672">&lt;/artifactid&gt;</span>
      <span style="color:#f92672">&lt;version&gt;</span>1.0-SNAPSHOT<span style="color:#f92672">&lt;/version&gt;</span>
<span style="color:#f92672">&lt;/dependency&gt;</span>
</code></pre></div>
</div>
  <footer class="post-footer">
    <ul class="post-tags">
      <li><a href="https://lilibing.gitee.io/tags/tags/">tags</a></li>
    </ul>
    <nav class="paginav">
      <a class="prev" href="https://lilibing.gitee.io/posts/new_one/">
        <span class="title">« 上一页</span>
        <br>
        <span>New_one</span>
      </a>
      <a class="next" href="https://lilibing.gitee.io/posts/first-page/">
        <span class="title">下一页 »</span>
        <br>
        <span>My 1st post</span>
      </a>
    </nav>
  </footer>
</article>
    </main><footer class="footer">
    <span>&copy; 2021 <a href="https://lilibing.gitee.io/">lilibing</a></span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)">
    <button class="top-link" id="top-link" type="button" accesskey="g">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
            <path d="M12 6H0l6-6z" />
        </svg>
    </button>
</a>



<script defer src="/assets/js/highlight.min.7680afc38aa6b15ddf158a4f3780b7b1f7dde7e91d26f073e6229bb7a0793c92.js" integrity="sha256-doCvw4qmsV3fFYpPN4C3sffd5&#43;kdJvBz5iKbt6B5PJI="
    onload="hljs.initHighlightingOnLoad();"></script>
<script>
    window.onload = function () {
        if (localStorage.getItem("menu-scroll-position")) {
            document.getElementById('menu').scrollLeft = localStorage.getItem("menu-scroll-position");
        }
    }
    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener("click", function (e) {
            e.preventDefault();
            var id = this.getAttribute("href").substr(1);
            if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
                    behavior: "smooth"
                });
            } else {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
            }
            if (id === "top") {
                history.replaceState(null, null, " ");
            } else {
                history.pushState(null, null, `#${id}`);
            }
        });
    });
    var mybutton = document.getElementById("top-link");
    window.onscroll = function () {
        if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
            mybutton.style.visibility = "visible";
            mybutton.style.opacity = "1";
        } else {
            mybutton.style.visibility = "hidden";
            mybutton.style.opacity = "0";
        }
    };

    function menu_on_scroll() {
        localStorage.setItem("menu-scroll-position", document.getElementById('menu').scrollLeft);
    }

</script>
<script>
    document.getElementById("theme-toggle").addEventListener("click", () => {
        if (document.body.className.includes("dark")) {
            document.body.classList.remove('dark');
            localStorage.setItem("pref-theme", 'light');
        } else {
            document.body.classList.add('dark');
            localStorage.setItem("pref-theme", 'dark');
        }
    })

</script>

</body>

</html>
